import datetime

import pandas as pd
"""
统计：
    探索风速数据
知识点：
    1.apply(func):对某个数据加上函数
    2.set_index()是将对应列设置为索引
    3.isnull():可以判断数据是否为空，如果计算总的空数据还可以使用sum()函数
    4.mean()用于计算平均值
"""
def fix_century(x):
    year = x.year -100 if x.year > 1989 else x.year
    return datetime.date(year,x.month,x.day)
def explore_wind():
    # 1.导入数据
    path = '../Pandas_exercises/wind.csv'
    # 2.将数据做储存并设置前三行为合适的索引
    data = pd.read_table(path,sep='\s+',parse_dates=[[0,1,2]])
    print('将数据做储存并设置前三行为合适的索引：\n',data.head())
    # 3.2061年我们真的有这条数据么，创建一个函数并用他来修复这个bug
    data['Yr_Mo_Dy'] = data['Yr_Mo_Dy'].apply(fix_century)
    print('创建函数并用它来修复数据不正确的Bug\n',data.head())
    # 4.将日期设置为索引，注意数据类型，应该为datetime64[ns]
    data['Yr_Mo_Dy'] = pd.to_datetime(data['Yr_Mo_Dy'])
    data = data.set_index('Yr_Mo_Dy')
    print('将日期设置为索引：\n',data.head())
    # 5.对应每一个location,一共有多少数据值缺失
    print('对应的每个location,一共欧多少数据值缺失：\n',data.isnull().sum())
    # 6.对应每个location,一共有多少完整的数据值
    print('对应每个location,一共有多少个完成的数据值\n',data.shape[0]-data.isnull().sum())
    # 7.对于全体数据，计算风速的平均值
    print('对于全体数据计算风速的平均值：\n',data.mean().mean())
    # 8.创建一个名为loc_starts的数据框去计算并储存每个location的风速最小值，最大值和平均值和标准差
    loc_start = pd.DataFrame()
    loc_start['min'] = data.min()
    loc_start['max'] = data.max()
    loc_start['avg'] = data.mean()
    loc_start['std'] = data.std()
    print('创建一个loc_start的数据计算并储存所有 location的风速最小值，最大值和平均值\n',loc_start)
    # 9.创建一个名为dat_starts的数据框取计算并存储所有的location的风速最小值，最大值，平均值和标准差
    day_start = pd.DataFrame()
    day_start['min'] = data.min(axis=1)
    day_start['max'] =data.max(axis=1)
    day_start['avg'] = data.mean(axis=1)
    day_start['std'] = data.std(axis=1)
    print('所有的location的风速最小值，最大值，平均值和标准值\n',day_start.head())
    # 10对于每个location,计算一月份的平均风速
    data['date'] = data.index
    data['month'] = data['date'].apply(lambda date:date.month)
    data['year'] =data['date'].apply(lambda date:date.year)
    data['day'] = data['date'].apply(lambda date:date.day)
    january_winds = data.query('month == 1')
    print('计算一月份的平均风速“：\n',january_winds.loc[:,'RPT':'MAL'].mean())
    # 11 对于数据记录按照年为频率取样
    print('数据记录按年为频率取样：\n',data.query('month == 1 and  day == 1'))
    # 12对于数据记录按照月为频率取样
    print('数据记录按照月为频率取样：\n',data.query('day == 1'))
explore_wind()